package main

import (
	"github.com/gorilla/websocket"
	"log"
	"net"
	"net/http"
	"strings"
)

func WebSocketHandler(w http.ResponseWriter, r *http.Request) {
	// 使用Upgrade函数升级HTTP连接为WebSocket连接
	//upgrader := websocket.Upgrader{}
	var upgrader = websocket.Upgrader{
		CheckOrigin: func(r *http.Request) bool {
			return true // 允许所有来源
		},
	}
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		log.Printf("连接错误=%v\n", err.Error())
		return
	}
	defer conn.Close()

	// 这里可以定义连接断开的回调函数
	onDisconnect := func() {
		log.Println("Client disconnected")
		// 这里可以添加其他清理逻辑
	}

	// 使用 defer 确保在连接断开时调用回调函数
	defer onDisconnect()

	/*	// 创建新的会话
		sessionID := generateSessionID() // 生成唯一的会话 ID
		session := &Session{ID: sessionID, Conn: conn}

		// 将会话添加到管理器
		s.lock.Lock()
		s.sessions[sessionID] = session
		s.lock.Unlock()

		log.Printf("New connection: %s", sessionID)*/

	// 在这里处理WebSocket连接
	// 你可以根据需要进行读取消息、处理消息和发送消息的操作
	// 在这里处理WebSocket连接
	for {
		messageType, message, err := conn.ReadMessage()
		if err != nil {
			log.Println("读取消息时出错：", err)
			break
		}
		log.Printf("收到消息：类型=%d, 内容=%s\n", messageType, string(message))
	}
}
func TestWebSocket1() {
	// 创建TCP监听器
	l, err := net.Listen("tcp", ":8080")
	if err != nil {
		log.Fatal(err)
	}
	defer l.Close()

	// 创建HTTP服务器
	s := &http.Server{
		Handler: http.HandlerFunc(WebSocketHandler),
	}

	// 启动服务器
	log.Println("Starting server on :8080")
	err = s.Serve(l)
	if err != nil && !strings.Contains(err.Error(), "use of closed network connection") {
		log.Fatal(err)
	}
}
